import java.util.Arrays;

public class rotatingArray {
    //给定一个整数数组 nums，将数组中的元素向右轮转 k 个位置，其中 k 是非负数。
    //写一个方法将数组指定下标元素反转


    public static void reverse(int[] nums,int start,int end) {
        if(nums.length == 1 || nums.length == 0) {
            return;
        }

        int i = start;
        int j = end;
        while (i < j) {
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
            i++;
            j--;
        }
    }
    public static void ratateArray(int[] nums,int k) {

        //处理特殊情况
        if(nums.length == 0 || k == 0) {
            return;
        }

        //当k等于数组长度的时候，相当于没有旋转
        //所以对k进行取模操作，避免不必要的旋转
        k = k % nums.length;
        //先将整个数组反转
        reverse(nums,0,nums.length - 1);
        //再将前k个元素反转
        reverse(nums,0,k - 1);
        //然后将剩余的元素反转
        reverse(nums,k,nums.length - 1);
    }

    public static void main(String[] args) {
        int[] nums = new int[]{1,2,3,4,5,6,7};
        ratateArray(nums,3);
        System.out.println(Arrays.toString(nums));
    }
}
